第十四章 重载运算和类型转换

Huan Lee Lv5

使用重载的运算符本质上是进行了一次函数调用

Untitled

Untitled

Tips

  • 尽量不重载&&, ||, 逗号, 取址符

Untitled

重载 <<

  • 必须是非成员运算符
  • 通常第二个参数为const Type &item, 引用避免拷贝, const保证元素不会更改
  • 通常返回类型统一为ostream &

重载 >>

  • 必须是非成员运算符
  • 需要处理输入可能失败的情况

重载=

  • 通常为成员运算符
  • 除了拷贝赋值和移动赋值, 还提供了接受花括号元素(initializer_list)的赋值

重载下标运算符

  • 必须是成员运算符(因为下标运算符返回的是引用)

重载递增递减运算符

  • 为了区分前置和后置运算符, 在声明后置运算符时会加上一个默认为0的int类型形参
  • 后置版本返回值, 而不是引用

Untitled

重载解址符和箭头引用符

  • 必须是成员运算符
  • ->访问成员的性质不能改变, 因此返回值必然是一个可以使用*的类型

重载函数调用运算符

  • 如果重载了(), 那么可以像使用函数一样使用这个类的对象
  • lambda表达式就是一个函数对象

类型转换运算符

operator type() const

  • 必须定义为类的成员函数, 没有返回类型, 没有形参, 通常后面有一个const

  • 返回值可以是任何函数返回类型(所以不能是数组或函数, 但可以是指针)

  • 类型转换运算的前后可能有隐式类型转换

    • 因此, 定义类型转换可能导致意想不到的错误

    • 可以显式定义类型转换符号, 此时也必须对应使用显式的类型转换static_cast(var), 除非类型转换发生在条件语句中

    • 要注意避免二义性的发生

  • Title: 第十四章 重载运算和类型转换
  • Author: Huan Lee
  • Created at : 2023-08-20 14:14:08
  • Updated at : 2024-02-26 04:53:15
  • Link: https://www.mirthfullee.com/2023/08/20/notion-第十四章 重载运算和类型转换-08ade27c/
  • License: This work is licensed under CC BY-NC-SA 4.0.